Salesforce OAuth 2.0 JWT ベアラーフローを利用して Postman でアクセストークンを取得する
参考:公式ページ
参考:https://mannharleen.github.io/2020-03-03-salesforce-jwt/
OAuth 2.0 JWT ベアラーフローて何?
Web Server OAuth フローとかでは認可のためにブラウザに認可しますか、しませんかのダイアログが出てしまいます
上記だと、自動化のための仕組み (バッチとか) が作りづらいという難点があります
JWT ベアラーフローでは、事前に公開鍵と、秘密鍵を作成します
公開鍵を Salesforce 側に登録しておき、クライアント側は 秘密鍵を持っていることを以ってして、認可を行います
これにより、画面を一切用いずに、アクセストークンを取得することができます
1. 秘密鍵、証明書署名要求、証明書の作成
コマンドプロンプトで以下を実行
秘密鍵の作成 (*1)
openssl genrsa -out privatekey.pem 1024
openssl genrsa -out privatekey.pem 2048
※(追記) 1024 で作成するとエラーになるゾ
証明書署名要求の作成 (*2)
openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 3650
色々聞かれるので、適当に答える
code: sample
Country Name (2 letter code) []:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) []:mycity
Organization Name (eg, company) []:Salesforce.com
Organizational Unit Name (eg, section) []:00Dxxxxxxxxxxx
Common Name (eg, fully qualified host name) []:hogefugaserver
Email Address []:****@****.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:******
2. 接続アプリケーションの作成
Salesforce 上での作業
・接続アプリケーションの作成
https://gyazo.com/d846c393b512104e4ecd5884e02825de
・デジタル署名を使用 にチェックをつけて、上で作成した公開鍵をアップロード
コンシューマ鍵(*3) と、コンシューマの秘密(*4) をメモする
3. 事前に認可をしておく
Salesforce 上での作業
設定 > 接続アプリケーションを管理する > (上で作った接続アプリケーションを編集)
許可されているユーザ :「管理者が承認したユーザは事前承認済み」に変更する
https://gyazo.com/2b52b3ab0a73d4ee6396eb2537d90e98
設定 > プロファイル > (許可するユーザのプロファイルを編集)
接続アプリケーションへのアクセス:(作成した接続アプリケーション)にチェックをつける
https://gyazo.com/6610b7423f192d1f0d43b4c2e125cfbc
4. JWT アサーションを作成する
※通常はプログラムで作る
以下ページからも作成できる
https://jwt.io/
・Algorithm:「RS256」を選択
画面右側を入力
・Payload
iss: コンシューマ鍵 (*3)
sub: (Salesforce のユーザ ID)
aud: https://login.salesforce.com (Sandbox の場合は、https://test.salesforce.com)
exp: 3 分以内の未来時間の unix time (*5)
(*5) exp については、ブラウザのデベロッパーツールから算出可能
F12 ボタン押下 > Console タブを選択 > (以下コードをコピペして Enter)
d = new Date(); d.setSeconds(d.getSeconds() + 180); d.valueOf()
https://gyazo.com/2d1368e64482e3bb9541d5cc301b91cd
code: sample
{
"iss":"3MV********",
"sub": "******@******.com",
"aud": "https://login.salesforce.com",
"exp": "1583238254198"
}
・VERIFY SIGNATURE
PUBLIC KEY: (*2) をコピペ
PRIVATE KEY: (*1) をコピペ
-> 画面左側の Encoded の文字列をコピーする (*6)
5. Postman でリクエストを送信する
・エンドポイント:https://login.salesforce.com/services/oauth2/token
・パラメータ:
grant_type: urn:ietf:params:oauth:grant-type:jwt-bearer
assertion: (*6) でコピーした値
-> アクセストークンが取得できることを確認した
https://gyazo.com/1e781aa1145f564f3ca033b071cf8ead